﻿using System;

using SimbaRGVMonitor.Common.Utils;
using SimbaRGVMonitor.Common.Diagnostics;

namespace SimbaRGVMonitor
{
    partial class MonitorCenter
    {
        class LoggerPool
        {
            public LoggerPool()
            {
                systemLogger = loggerPool.GetLogger("System");

                InitializeSettings();
            }

            //====================================================================================================
            //以上是类型构造函数
            //----------------------------------------------------------------------------------------------------
            //以下是类型字段
            //====================================================================================================

            private readonly MonitorLogger systemLogger;
            private readonly MonitorLoggerPool loggerPool = new MonitorLoggerPool();

            //====================================================================================================
            //以上是类型字段
            //----------------------------------------------------------------------------------------------------
            //以下是类型属性
            //====================================================================================================

            public MonitorLogger SystemLogger
            {
                get { return systemLogger; }
            }

            //====================================================================================================
            //以上是类型属性
            //----------------------------------------------------------------------------------------------------
            //以下是类型事件及触发函数
            //====================================================================================================

            public event EventHandler<MonitorLoggerWritedEventArgs> LogWrited
            {
                add { loggerPool.LogWrited += value; }
                remove { loggerPool.LogWrited -= value; }
            }

            //====================================================================================================
            //以上是类型事件及触发函数
            //----------------------------------------------------------------------------------------------------
            //以下是初始化设置
            //====================================================================================================

            private void InitializeSettings()
            {
                const string key = "UseLog4Net";
                try
                {
                    var userLog4Net = ConfigurationUtil.GetAppSettingsBooleanValue(key);
                    loggerPool.Enable = userLog4Net;
                }
                catch (Exception ex)
                {
                    var title = string.Format("加载日志配置想{0}失败", key);
                    systemLogger.Error(title, ex);
                }
            }

            //====================================================================================================
            //以上是初始化设置
            //----------------------------------------------------------------------------------------------------
            //以下是获取日志记录器
            //====================================================================================================

            public MonitorLogger GetLogger(string name)
            {
                return loggerPool.GetLogger(name);
            }
        }
    }
}
